package com.helloUIBinder.client.widgets;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;

public class PageChooserWidget extends Composite {

    private static PageChooserWidgetUiBinder uiBinder = GWT.create(PageChooserWidgetUiBinder.class);

    interface PageChooserWidgetUiBinder extends UiBinder<Widget, PageChooserWidget> {
    }

    @UiField
    HTMLPanel pageChooserContainer;

    public PageChooserWidget(Integer pagesCount, SimpleEventBus eventBus, Integer currentPage) {
        initWidget(uiBinder.createAndBindUi(this));

        if (pagesCount < 8) {
//            PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
//            prevLinkWidget.setLinkName("Prev");
//            pageChooserContainer.add(prevLinkWidget);
//
//            for (int count = 1; count <= pagesCount; count++) {
//                PageLinkWidget pageLinkWidget;
//                if (count == currentPage) {
//                    pageLinkWidget = new PageLinkWidget(eventBus, true);
//                } else {
//                    pageLinkWidget = new PageLinkWidget(eventBus);
//                }
//                pageLinkWidget.setLinkName(String.valueOf(count));
//                pageChooserContainer.add(pageLinkWidget);
//            }
//
//            PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
//            nextLinkWidget.setLinkName("Next");
//            pageChooserContainer.add(nextLinkWidget);

            PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
            nextLinkWidget.setLinkName("Next");
            pageChooserContainer.add(nextLinkWidget);

            for (int count = pagesCount; count >= 1; count--) {
                PageLinkWidget pageLinkWidget;
                if (count == currentPage) {
                    pageLinkWidget = new PageLinkWidget(eventBus, true);
                } else {
                    pageLinkWidget = new PageLinkWidget(eventBus);
                }
                pageLinkWidget.setLinkName(String.valueOf(count));
                pageChooserContainer.add(pageLinkWidget);
            }

            PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
            prevLinkWidget.setLinkName("Prev");
            pageChooserContainer.add(prevLinkWidget);
        } else {
            if (currentPage <= 4) { //in the beginning
//                PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
//                prevLinkWidget.setLinkName("Prev");
//                pageChooserContainer.add(prevLinkWidget);
//
//                for (int count = 1; count <= 5; count++) {
//                    PageLinkWidget pageLinkWidget;
//                    if (count == currentPage) {
//                        pageLinkWidget = new PageLinkWidget(eventBus, true);
//                    } else {
//                        pageLinkWidget = new PageLinkWidget(eventBus);
//                    }
//                    pageLinkWidget.setLinkName(String.valueOf(count));
//                    pageChooserContainer.add(pageLinkWidget);
//                }
//
//                PageLinkWidget secondPointsLink = new PageLinkWidget(eventBus);
//                secondPointsLink.setLinkName("...");
//                pageChooserContainer.add(secondPointsLink);
//
//                PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
//                nextLinkWidget.setLinkName("Next");
//                pageChooserContainer.add(nextLinkWidget);

                PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
                nextLinkWidget.setLinkName("Next");
                pageChooserContainer.add(nextLinkWidget);

                PageLinkWidget secondPointsLink = new PageLinkWidget(eventBus);
                secondPointsLink.setLinkName("...");
                pageChooserContainer.add(secondPointsLink);

                for (int count = 5; count >= 1; count--) {
                    PageLinkWidget pageLinkWidget;
                    if (count == currentPage) {
                        pageLinkWidget = new PageLinkWidget(eventBus, true);
                    } else {
                        pageLinkWidget = new PageLinkWidget(eventBus);
                    }
                    pageLinkWidget.setLinkName(String.valueOf(count));
                    pageChooserContainer.add(pageLinkWidget);
                }

                PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
                prevLinkWidget.setLinkName("Prev");
                pageChooserContainer.add(prevLinkWidget);

            } else {
                if (currentPage >= (pagesCount - 3)) { //in the end
//                    PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
//                    prevLinkWidget.setLinkName("Prev");
//                    pageChooserContainer.add(prevLinkWidget);
//
//                    PageLinkWidget firstPointsLink = new PageLinkWidget(eventBus);
//                    firstPointsLink.setLinkName("...");
//                    pageChooserContainer.add(firstPointsLink);
//
//                    for (int count = pagesCount - 4; count <= pagesCount; count++) {
//                        PageLinkWidget pageLinkWidget;
//                        if (count == currentPage) {
//                            pageLinkWidget = new PageLinkWidget(eventBus, true);
//                        } else {
//                            pageLinkWidget = new PageLinkWidget(eventBus);
//                        }
//                        pageLinkWidget.setLinkName(String.valueOf(count));
//                        pageChooserContainer.add(pageLinkWidget);
//                    }
//
//                    PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
//                    nextLinkWidget.setLinkName("Next");
//                    pageChooserContainer.add(nextLinkWidget);

                    PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
                    nextLinkWidget.setLinkName("Next");
                    pageChooserContainer.add(nextLinkWidget);

                    for (int count = pagesCount; count >= (pagesCount - 4); count--) {
                        PageLinkWidget pageLinkWidget;
                        if (count == currentPage) {
                            pageLinkWidget = new PageLinkWidget(eventBus, true);
                        } else {
                            pageLinkWidget = new PageLinkWidget(eventBus);
                        }
                        pageLinkWidget.setLinkName(String.valueOf(count));
                        pageChooserContainer.add(pageLinkWidget);
                    }

                    PageLinkWidget firstPointsLink = new PageLinkWidget(eventBus);
                    firstPointsLink.setLinkName("...");
                    pageChooserContainer.add(firstPointsLink);

                    PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
                    prevLinkWidget.setLinkName("Prev");
                    pageChooserContainer.add(prevLinkWidget);
                } else {
                    if (currentPage >= 4) { // in the middle
//                        PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
//                        prevLinkWidget.setLinkName("Prev");
//                        pageChooserContainer.add(prevLinkWidget);
//
//                        PageLinkWidget firstPointsLink = new PageLinkWidget(eventBus);
//                        firstPointsLink.setLinkName("...");
//                        pageChooserContainer.add(firstPointsLink);
//
//                        for (int count = (currentPage - 2); count <= (currentPage + 2); count++) {
//                            PageLinkWidget pageLinkWidget;
//                            if (count == currentPage) {
//                                pageLinkWidget = new PageLinkWidget(eventBus, true);
//                            } else {
//                                pageLinkWidget = new PageLinkWidget(eventBus);
//                            }
//                            pageLinkWidget.setLinkName(String.valueOf(count));
//                            pageChooserContainer.add(pageLinkWidget);
//                        }
//
//                        PageLinkWidget secondPointsLink = new PageLinkWidget(eventBus);
//                        secondPointsLink.setLinkName("...");
//                        pageChooserContainer.add(secondPointsLink);
//
//                        PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
//                        nextLinkWidget.setLinkName("Next");
//                        pageChooserContainer.add(nextLinkWidget);

                        PageLinkWidget nextLinkWidget = new PageLinkWidget(eventBus);
                        nextLinkWidget.setLinkName("Next");
                        pageChooserContainer.add(nextLinkWidget);

                        PageLinkWidget secondPointsLink = new PageLinkWidget(eventBus);
                        secondPointsLink.setLinkName("...");
                        pageChooserContainer.add(secondPointsLink);

                        for (int count = (currentPage + 2); count >= (currentPage - 2); count--) {
                            PageLinkWidget pageLinkWidget;
                            if (count == currentPage) {
                                pageLinkWidget = new PageLinkWidget(eventBus, true);
                            } else {
                                pageLinkWidget = new PageLinkWidget(eventBus);
                            }
                            pageLinkWidget.setLinkName(String.valueOf(count));
                            pageChooserContainer.add(pageLinkWidget);
                        }

                        PageLinkWidget firstPointsLink = new PageLinkWidget(eventBus);
                        firstPointsLink.setLinkName("...");
                        pageChooserContainer.add(firstPointsLink);

                        PageLinkWidget prevLinkWidget = new PageLinkWidget(eventBus);
                        prevLinkWidget.setLinkName("Prev");
                        pageChooserContainer.add(prevLinkWidget);
                    }
                }
            }
        }
    }
}
